home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / strategy / xshisen-.001 / xshisen-~ / xshisen-1.35 / mahjong.C < prev    next >
C/C++ Source or Header  |  1996-01-22  |  3KB  |  117 lines

  1. #include <stdio.h>
  2. #include "components.h"
  3.  
  4. Mahjong Mp[36];
  5.  
  6. Mahjong::Mahjong(void)
  7. {
  8. }
  9.  
  10. // filename1: regular piece xpm data
  11. // filename2: selected piece xpm data
  12. // num:       ID for object instance
  13. // closeness: Color closeness for xpm library
  14. void
  15. Mahjong::ReadFile(Widget w, char *filename, int num, int closeness)
  16. {
  17.     XpmAttributes attributes;
  18.     int result;
  19.     Pixmap mask;
  20.     Colormap colormap = XDefaultColormapOfScreen(XtScreen(w));
  21.     GC gc;
  22.     XGCValues gcv;
  23.  
  24.     attributes.valuemask = XpmColormap | XpmSize | XpmCloseness;
  25.     attributes.colormap  = colormap;
  26.     attributes.exactColors = False;
  27.     attributes.closeness = closeness;
  28.     id = num;
  29.     result = XpmReadFileToPixmap(XtDisplay(w), XtWindow(w), filename,
  30.                                   &data, &mask, &attributes);
  31.     width  = original_width  = attributes.width;
  32.     height = original_height = attributes.height;
  33.     if (result != XpmSuccess && result != XpmColorError) {
  34.         fprintf(stderr, "XpmReadFileToPixmap failed ");
  35.         switch(result) {
  36.         case XpmOpenFailed:
  37.             fprintf(stderr, "(Cannot open xpm files)\n");
  38.             break;
  39.         case XpmFileInvalid:
  40.             fprintf(stderr, "(xpm file may be broken)\n");
  41.             break;
  42.         case XpmNoMemory:
  43.             fprintf(stderr, "(memory exhausted)\n");
  44.             break;
  45.         case XpmColorFailed:
  46.             fprintf(stderr, "(color allocation failed [closeness:%d])\n",
  47.                     closeness);
  48.             break;
  49.         default:
  50.             fprintf(stderr, "(reason unknown)\n");
  51.             break;
  52.         }
  53.         fprintf(stderr, " %s\n", filename);
  54.         exit(1);
  55.     } else {
  56.         attributes.valuemask = XpmColormap;
  57.         gcv.foreground = WhitePixelOfScreen(XtScreen(w));
  58.         gc = XCreateGC(XtDisplay(w), XtWindow(w), GCForeground, &gcv);
  59.         datag = MakeHalfBrightPixmap(data, gc);
  60.         result = XpmSuccess;
  61.         XFreeGC(XtDisplay(w), gc);
  62.     }
  63.     rdata  = data;
  64.     rdatag = datag;
  65.     resized = 0;
  66. }
  67.  
  68. void
  69. Mahjong::Resize(Widget w, GC gc, unsigned int new_width, unsigned int new_height)
  70. {
  71. #if DEBUG > 2
  72.     fprintf(stderr, "piece[%2.2d] resize (%d,%d)->(%d,%d)\n",
  73.             id, width, height, new_width, new_height);
  74. #endif
  75.     if (new_width == width && new_height == height) {
  76.         return;
  77.     }
  78.  
  79.     if (resized) {
  80.         XFreePixmap(XtDisplay(w), rdata);
  81.         XFreePixmap(XtDisplay(w), rdatag);
  82.     }
  83.  
  84.     if (new_width == original_width && new_height == original_height) {
  85.         rdata  = data;
  86.         rdatag = datag;
  87.         resized = 0;
  88.     }
  89.     else {
  90.         rdata  = ResizePixmap(data,  gc, new_width, new_height);
  91.         rdatag = MakeHalfBrightPixmap(rdata, gc);
  92.         resized = 1;
  93.     }
  94.     width  = new_width;
  95.     height = new_height;
  96. }
  97.  
  98. void
  99. Mahjong::GetSize(unsigned int &w, unsigned int &h)
  100. {
  101.     w = width;
  102.     h = height;
  103. }
  104.  
  105. void
  106. Mahjong::Draw(Widget w, GC gc, int x, int y, int d)
  107. {
  108.     switch(d) {
  109.     case 1:
  110.         XCopyArea(XtDisplay(w), rdata,  XtWindow(w), gc, 0, 0, width, height, x, y);
  111.         break;
  112.     case 2:
  113.         XCopyArea(XtDisplay(w), rdatag, XtWindow(w), gc, 0, 0, width, height, x, y);
  114.         break;
  115.     }
  116. }
  117.